﻿using DataObjects;
using InfrastructureSqlServer.Helpers;
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace DataAccess
{
    public class SaldoClienteDAO
    {
        private List<SaldoCliente> CarregarListaSaldoCliente(SqlDataReader dr)
        {
            List<SaldoCliente> liSaldoCliente = new List<SaldoCliente>();

            while (dr.Read())
            {
                SaldoCliente saldoCliente = new SaldoCliente();
                saldoCliente.SaldoClienteId = int.Parse(dr["SALDOCLIENTEID"].ToString());
                saldoCliente.Valor = decimal.Parse(dr["VALOR"].ToString());
                saldoCliente.Total = decimal.Parse(dr["TOTAL"].ToString());
                saldoCliente.ClienteId = int.Parse(dr["CLIENTEID"].ToString());
                liSaldoCliente.Add(saldoCliente);
            }

            return liSaldoCliente;
        }

        public void Inserir(SaldoCliente _saldoCliente)
        {
            SqlParameter[] paramsToSP = new SqlParameter[3];

            paramsToSP[0] = new SqlParameter("@valor", _saldoCliente.Valor);
            paramsToSP[1] = new SqlParameter("@total", _saldoCliente.Total);
            paramsToSP[2] = new SqlParameter("@clienteid", _saldoCliente.ClienteId);

            try
            {
                SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.StoredProcedure, "stp_insert_saldo_cliente", paramsToSP);

            }
            catch (Exception e)
            {
                throw new Exception("Erro ao inserir saldo do cliente, Erro: " + e.Message);
            }

        }

        public bool Alterar(SaldoCliente _saldoCliente)
        {
            SqlParameter[] paramsToSP = new SqlParameter[4];

            paramsToSP[0] = new SqlParameter("@saldoClienteId", _saldoCliente.SaldoClienteId);
            paramsToSP[1] = new SqlParameter("@valor", _saldoCliente.Valor);
            paramsToSP[2] = new SqlParameter("@total", _saldoCliente.Total);
            paramsToSP[3] = new SqlParameter("@clienteId", _saldoCliente.ClienteId);

            try
            {
                SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.StoredProcedure, "stp_update_saldoCliente", paramsToSP);
                return true;
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao alterar saldo do cliente, Erro: " + e.Message);
            }

        }

        public bool Deletar(SaldoCliente _saldoCliente)
        {
            SqlParameter[] paramsToSP = new SqlParameter[1];

            paramsToSP[0] = new SqlParameter("@saldoClienteId", _saldoCliente.SaldoClienteId);

            try
            {
                SqlHelper.ExecuteNonQuery(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.StoredProcedure, "stp_delete_saldoClienteId", paramsToSP);
                return true;
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao deletar saldo do cliente, Erro: " + e.Message);
            }

        }

        public List<SaldoCliente> Consultar(int _pessoaId)
        {
            string sqlQuery = string.Format("SELECT * FROM SALDOCLIENTE WHERE clienteID = {0}", _pessoaId);

            try
            {
                return CarregarListaSaldoCliente(SqlHelper.ExecuteReader(ConfigurationManager.ConnectionStrings["conexao"].ToString(),
                                            CommandType.Text, sqlQuery));
            }
            catch (Exception e)
            {
                throw new Exception("Erro ao consultar saldo do cliente, Erro: " + e.Message);
            }

        }

    }//class
}//namespace
